/**
 *	@file	pgradio_sub.h
 *	@brief	ポケギア　ラジオアプリ　サブ
 *	@author	Miyuki Iwasawa
 *	@date	07.10.16
 */
#include "common.h"
#include "system/procsys.h"
#include "system/arc_util.h"
#include "system/arc_tool.h"
#include "system/brightness.h"
#include "system/bmp_list.h"
#include "system/bmp_menu.h"
#include "system/pm_str.h"
#include "system/msgdata.h"
#include "system/fontproc.h"
#include "system/snd_tool.h"
#include "system/clact_util.h"
#include "system/clact_tool.h"
#include "system/render_oam.h"
#include "system/wipe.h"
#include "system/buflen.h"
#include "gflib/touchpanel.h"
#include "field/field_matrix.h"
#include "field/field_place_name.h"
#include "application/app_tool.h"
#include "application/pokegear.h"
#include "msgdata/msg.naix"

#include "../pgear_sys.h"
#include "../pgear_frm.h"
#include "pgradio_sys.h"

#define __PGRADIO_SUB_H_GLOBAL
#include "pgradio_sub.h"
#include "pgradio_key.h"

/**
 *	@brief	スイッチの描画切替
 */
void PGRadioSub_SwitchStChange(PGRADIO_SYS_WORK* wk,u8 st_n,u8 st_o)
{
	static u8 data[][2] = {
	 {SW01_PX,SW01_PY},
	 {SW02_PX,SW02_PY},
	 {SW03_PX,SW03_PY},
	 {SW04_PX,SW04_PY},
	};
	if(st_o < SW_MAX){
		GF_BGL_ScrWriteExpand(wk->sys->bgl,GF_BGL_FRAME2_M,
			data[st_o][0],data[st_o][1],SW_SX,SW_SY,
			wk->pSBg->rawData,0,24,
			wk->pSBg->screenWidth/8,wk->pSBg->screenHeight/8);
	}
	if(st_n < SW_MAX){
		GF_BGL_ScrWriteExpand(wk->sys->bgl,GF_BGL_FRAME2_M,
			data[st_n][0],data[st_n][1],SW_SX,SW_SY,
			wk->pSBg->rawData,SW_SX,24,
			wk->pSBg->screenWidth/8,wk->pSBg->screenHeight/8);
	}
	GF_BGL_LoadScreenV_Req(wk->sys->bgl,GF_BGL_FRAME2_M);
}

/**
 *	@brief	ラジオのタッチからキーへの描画切替
 */
void PGRadioSub_ToKeyChange(void* app_wk)
{
	PGRADIO_SYS_WORK* wk = (PGRADIO_SYS_WORK*)app_wk;

	//タッチから切り替えたら必ずアプリキーモード
	wk->touch_st = 0;
	//選択カーソル表示
//	CursorMvMan_SetCursorDrawFlag(wk->sys->curMan,PGKM_APP_PARAM1,TRUE);
//	CursorMvMan_SetCurrent(wk->sys->curMan,PGKM_APP_PARAM1,0);
}

/**
 *	@brief	タッチでシステムモードからアプリモードに切り替えたときの処理
 */
void PGRadioSub_ToTouchChange(void* app_wk)
{
	PGRADIO_SYS_WORK* wk = (PGRADIO_SYS_WORK*)app_wk;

	wk->touch_st = 0;
	wk->sys->control = PGCONT_APP;
	//選択カーソル非表示
	CursorMvMan_SetCursorDrawFlag(wk->sys->curMan,PGKM_SYS_PARAM,FALSE);
}

/**
 *	@brief	ラジオ番組再生開始
 */
void PGRadioSub_ProgramCall(PGRADIO_SYS_WORK* wk)
{
	if(wk->run_st){
		IWASAWA_PRINT("番組再生中に別の番組を再生しようとしました\n");
		return;
	}
	if(wk->level_st == REC_LEVEL2){
		PMRadio_ProgramCall(wk->pRadioSys,wk->ch_id,PMRADIO_REC_NORMAL);
	}else{
		PMRadio_ProgramCall(wk->pRadioSys,wk->ch_id,PMRADIO_REC_FEEBLE);
	}
	//番組タイトルとDJネームを出力
//	PMRadio_CurrentProgramInfoPut(wk->pRadioSys,&(wk->win[WIN_TITLE]),&(wk->win[WIN_DJ]));

	//番組再生中フラグをON
	wk->run_st = TRUE;
}

/**
 *	@brief	ラジオ番組再生終了
 */
void PGRadioSub_ProgramEnd(PGRADIO_SYS_WORK* wk)
{
	if(wk->run_st == 0){
		return;
	}
	PMRadio_ProgramEnd(wk->pRadioSys);
	GF_BGL_BmpWinDataFill(&wk->win[WIN_TITLE],0x00);
	GF_BGL_BmpWinDataFill(&wk->win[WIN_DJ],0x00);
	GF_BGL_BmpWinOnVReq(&wk->win[WIN_TITLE]);
	GF_BGL_BmpWinOnVReq(&wk->win[WIN_DJ]);
	wk->run_st = 0;
}

/**
 *	@brief	アプリ初期化時の番組再生チェック
 */
void PGRadioSub_FirstProgSet(PGRADIO_SYS_WORK* wk)
{
#if 0
	u8	ret;
	ret = PGRadioKey_GetChannelFromPos(wk,wk->x,wk->y);

	if(ret == RADIO_CHANNEL_NONE){
		wk->ch_id = RADIO_CHANNEL_NONE;
		wk->level_st = REC_LEVEL0;
		return;
	}
	if((ret % 2)){	//再生状態弱
		wk->level_st = REC_LEVEL1;
	}else{	//ノーマル
		wk->level_st = REC_LEVEL2;
	}
	wk->ch_id = ret/2;
#else
	u8	level;
	wk->ch_id = PGRadioKey_GetChannelFromPos(wk,wk->x,wk->y,&level);
	wk->level_st = level;
#endif
	if(wk->ch_id < RADIO_CH_MAX){
		PGRadioSub_ProgramCall(wk);
	}
}

/**
 *	@brief	ラジオ VBlank関数
 */
void PGRadioSub_VBlank(PGEAR_SYS_WORK* sys_wk,void* app_wk)
{
	PGRADIO_SYS_WORK* wk = (PGRADIO_SYS_WORK*)app_wk;

	if(wk->run_st){
		PMRadio_ProgramMain(wk->pRadioSys);
	}
}


/*
 *	@brief	サブ画面スクロールセット
 *	@param	wk	マップワークへのポインタ
 *	@param	mode	0:展開,1:格納
 */
void PGRadioSub_GuideScrollSet(PGRADIO_SYS_WORK* wk,u8 mode)
{
	int i;

	//まずはウィンドウマスクセット
	G2S_SetWnd0Position(0,SUB_SCR_MASK,255,192);
	G2S_SetWnd1Position(255,SUB_SCR_MASK,0,192);
	G2S_SetWndOutsidePlane( GX_WND_PLANEMASK_BG0|GX_WND_PLANEMASK_OBJ,FALSE);
	G2S_SetWnd0InsidePlane(	GX_WND_PLANEMASK_BG0|GX_WND_PLANEMASK_BG1|
							GX_WND_PLANEMASK_BG2|GX_WND_PLANEMASK_BG3|
							GX_WND_PLANEMASK_OBJ, FALSE);
	G2S_SetWnd1InsidePlane(	GX_WND_PLANEMASK_BG0|GX_WND_PLANEMASK_BG1|
							GX_WND_PLANEMASK_BG2|GX_WND_PLANEMASK_BG3|
							GX_WND_PLANEMASK_OBJ, FALSE);
	GXS_SetVisibleWnd(GX_WNDMASK_W0|GX_WNDMASK_W1);

	if(mode == 0){
		//出すときは、スクロール値をセットしてから表示をOnにする
		for(i = 0;i < 3;i++){
			GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME1_S+i, GF_BGL_SCROLL_Y_SET,-SUB_SCR_SIZ);
			GF_BGL_VisibleSet(GF_BGL_FRAME1_S+i,VISIBLE_ON);
		}
	}else{
		GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME1_S, GF_BGL_SCROLL_Y_DEC, 0);
		GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME2_S, GF_BGL_SCROLL_Y_DEC, 0);
		GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME3_S, GF_BGL_SCROLL_Y_DEC, 0);
	}
	wk->sub_ct = 0;
	wk->sub_scr_end = 0;
}
/*
 *	@brief	サブ画面スクロール　終了待ち
 *	@param	wk	マップワークへのポインタ
 *	@param	mode	0:展開,1:格納
 */
int PGRadioSub_GuideScrollWait(PGRADIO_SYS_WORK* wk,u8 mode)
{
	int i;

	if(wk->sub_scr_end){
		return TRUE;	//終了状態で呼ばれても良いようにしておく
	}

	if(mode == 0){
		GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME1_S, GF_BGL_SCROLL_Y_INC, SUB_SCR_Y);
		GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME2_S, GF_BGL_SCROLL_Y_INC, SUB_SCR_Y);
		GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME3_S, GF_BGL_SCROLL_Y_INC, SUB_SCR_Y);
	}else{
		GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME1_S, GF_BGL_SCROLL_Y_DEC, SUB_SCR_Y);
		GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME2_S, GF_BGL_SCROLL_Y_DEC, SUB_SCR_Y);
		GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME3_S, GF_BGL_SCROLL_Y_DEC, SUB_SCR_Y);
	}

	if(++wk->sub_ct < SUB_SCR_SYNC){
		return FALSE;
	}
	wk->sub_ct = 0;
	wk->sub_scr_end = 1;
	if(mode == 1){
		//隠すときは、表示をoffにしてから、スクロール値を元に戻しておく
		for(i = 0;i < 3;i++){
			GF_BGL_VisibleSet(GF_BGL_FRAME1_S+i,VISIBLE_OFF);
			GF_BGL_ScrClear(wk->sys->bgl,GF_BGL_FRAME1_S+i);
			GF_BGL_ScrollSet( wk->sys->bgl,GF_BGL_FRAME1_S+i, GF_BGL_SCROLL_Y_SET, 0);
			GF_BGL_LoadScreenV_Req(wk->sys->bgl,GF_BGL_FRAME1_S+i);
		}
	}
	//ウィンドウマスク解除
	GXS_SetVisibleWnd(GX_WNDMASK_NONE);
	G2S_SetWnd0Position(0,0,0,0);
	G2S_SetWnd1Position(0,0,0,0);
	G2S_SetWnd0InsidePlane(GX_WND_PLANEMASK_NONE,FALSE);
	G2S_SetWnd1InsidePlane(GX_WND_PLANEMASK_NONE,FALSE);
	G2S_SetWndOutsidePlane(GX_WND_PLANEMASK_NONE,FALSE);
	return TRUE;
}

